package com.huanlis.core;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 动作注册中心
 * 用于注册和管理所有的工作流动作
 */
public class ActionRegistry {
    /**
     * 存储已注册动作的映射表
     * 使用ConcurrentHashMap保证线程安全
     */
    private final Map<String, Action<? extends BaseDomain, ? extends BaseDomain>> actions = new ConcurrentHashMap<>();

    private final Map<String, String> actionClassNames = new ConcurrentHashMap<>();

    /**
     * 注册一个动作
     *
     * @param actionName 动作名称
     * @param action     动作实例
     */
    public void register(String actionName, String clazzName, Action<? extends BaseDomain, ? extends BaseDomain> action) {
        actions.put(clazzName, action);
        actionClassNames.put(clazzName, actionName);
    }

    /**
     * 根据名称获取已注册的动作
     *
     * @param actionName 动作名称
     * @return 对应的动作实例，如果未找到则返回null
     */
    public Action<? extends BaseDomain, ? extends BaseDomain> getAction(String actionName) {
        String clazzName = actionClassNames.get(actionName);
        if (clazzName == null) {
            return null;
        }
        return (Action<? extends BaseDomain, ? extends BaseDomain>) actions.get(clazzName);
    }

    public final Map<String, Action<? extends BaseDomain, ? extends BaseDomain>> getActions() {
        return actions;
    }

    public final Map<String, String> getActionClassNames() {
        return actionClassNames;
    }
}